<template>
  <div class="audition183">
    <p>在js中，<span class="color">0.1 + 0.2 != 0.3</span></p>
    <p>原因是：</p>
    <p>在 0.1+0.2 的计算过程中发生了两次精度丢失。</p>
    <p>第一次是在 0.1 和 0.2 转成双精度二进制浮点数时，由于二进制浮点数的小数位只能存储52位，导致小数点后第53位的数要进行为1则进1为0则舍去的操作，从而造成一次精度丢失。</p>
    <p>第二次在 0.1 和 0.2 转成二进制浮点数后，二进制浮点数相加的过程中，小数位相加导致小数位多出了一位，又要让第53位的数进行为1则进1为0则舍去的操作，又造成一次精度丢失。</p>
    <p>了解更多：<a href="https://www.jianshu.com/p/2a5c877315ef" target="_blank"></a></p>
    <p>有两种方法可以让0.1 + 0.2 === 0.3</p>
    <p>第一种：转换为整数计算，再转换为浮点数比较</p>
    <code class="code">
      (0.1 * 10 + 0.2 * 10) / 10 === 0.3 // <span class="color2">true</span>
    </code>
    <p>第二种：利用ES6规定的最小误差值<span class="color">Number.EPSILON</span></p>
    <p>这个值是2的-52次幂。如果两个值之间相差小于Number.EPSILON，则认为没有误差，这两个值就认为是相等的</p>
    <code class="code">
      function numEqual(a, b) {<br />
        <span class="indient">return Math.abs(a - b) &lt; <span class="color">Number.EPSILON</span></span><br />
      }<br />
      console.log(numEqual(0.1 + 0.2, 0.3)) // true
    </code>
  </div>
</template>

<script>
export default {
  name: 'Audition183'
}
</script>

<style>

</style>